// JavaScript Document
/*DEFINICION DE FUNCIONES Y VARIABLES GLOBALES*/	
	var misZonasHash = new Hashtable(); //hash de todas las zonas, accesible por id de la zona
	var misZonasMarkersHash = new Hashtable(); //hash con los Polygonos de las zonas (se van creando a medida que se hacen visibles)
	
	var zonasSeleccionadasId = new Array(); //Array con los ID de las zonas seleccionadas en los checkbox
	var zonasSeleccionadasHeredadasId = new Array(); 
	
	var misZonasVisiblesId = new Array(); //arreglo con los ID de las zonas visibles, se inicializa con la configuracion por defecto
	if (trim(ZONASVISIBLES_string)!='')
		misZonasVisiblesId = ZONASVISIBLES_string.split(",");
    
	var highlightZona= null; //Polyline NEGRA que se marca en los limites de las zonas para denotar su seleccion...
	var highlightZonaTimeOut = 0;
	
	var orderTypeMisZonas = "A";

	function removeHighlightZonaMarker(){
		if (highlightZona){ 
			map.removeLayer(highlightZona); 
			highlightZona.destroy();
			highlightZona=null;
		}
	}	
	
	function highlightZonaMarker(idZona){
	  var miZona = misZonasHash.get(idZona.toString());
	  var polyPoints = new Array();
	  for (var i=0; i<miZona.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miZona.PUNTOSLNG[i],miZona.PUNTOSLAT[i]).transform(displayProjection, projection);
			polyPoints[i]=geoPoint;
			}
      if (highlightZona) {
        map.removeLayer(highlightZona);
		highlightZona.destroy();
      }
	  highlightZona = new OpenLayers.Layer.Vector("highlightZona");
	  map.addLayer(highlightZona);
	  var lineString = new OpenLayers.Geometry.LineString(polyPoints);
	  var feature = new OpenLayers.Feature.Vector(lineString,null,{
            strokeColor: "#"+miZona.color.toUpperCase(),
            strokeWidth: 4
        });
	  
	  highlightZona.addFeatures(feature);
	  centrarEnBounds(lineString.getBounds());
	  clearTimeout(highlightZonaTimeOut);
	  highlightZonaTimeOut = setTimeout ( "removeHighlightZonaMarker();", 5000 );
    }
	
	function centrarNewZona(){
		if (newZonaPolygonLayer.features.length>0){
			centrarEnBounds(newZonaPolygonLayer.features[0].geometry.getBounds());
		}
	}
	
	function createPopUpZona(e, idZona, element){

	   PopUpMenuMap = new PopupMenu();
	   
	   var heredado = eval(misZonasHash.get(idZona.toString()).esflota==3);
	   if (indexOfArray(misZonasVisiblesId,idZona.toString())!=-1){
		    PopUpMenuMap.add('Ocultar', function(target) {
		   		ocultarZona(idZona.toString());
	   		});
	 	    PopUpMenuMap.add('Localizar en el mapa', function(target) {
	 	    		dejarDeSeguir();
				highlightZonaMarker(idZona.toString());
	  	    });
	   }
	   else {
	   	    PopUpMenuMap.add('Ver y localizar', function(target) {
		   	    	dejarDeSeguir();
				mostrarZona(idZona.toString());
				highlightZonaMarker(idZona.toString());
				//centrar(misZonasHash.get(idZona.toString()).latitud,misZonasHash.get(idPoint.toString()).longitud);
	  	    });
	   	    PopUpMenuMap.add('Ver', function(target) {
				mostrarZona(idZona.toString());     
	  	    });
	   }
	   
	   if (((!heredado)||(LOGIN.objetivoDB == 3))&&(LOGIN.PERMISOS[8])){
	   		PopUpMenuMap.addSeparator();
	 	    PopUpMenuMap.add('Modificar', function(target) {
    	  		modificarZona(idZona.toString());
	   		});
	   		PopUpMenuMap.add('Eliminar', function(target) {
	      		eliminarZonas(idZona.toString());
	   		});
	   }
	   
	   if ((LOGIN.objetivo == 3)&&(LOGIN.PERMISOS[8])){ //SE PUEDE PUBLICAR	
	   	   PopUpMenuMap.addSeparator();
		   if (parseInt(misZonasHash.get(idZona.toString()).publico))
		   		PopUpMenuMap.add('Dejar de publicar', function(target) {
	      			publicarZonas(false, idZona.toString());
	   			});
	   	   else
	   			PopUpMenuMap.add('Publicar', function(target) {
	      			publicarZonas(true, idZona.toString());
	  			});
	   }

	   PopUpMenuMap.setSize(140, 0);
	   PopUpMenuMap.bind(element); // target is this pre block
	   PopUpMenuMap.show(e);
	   return false;
	   }

/*************************FUNCIONES PARA PANTALLA PRINCIPAL************************/
	
	var reqHandlerMisZonas = null;
	
	function ocultarZonasVisibles(){
		for (i=0; i<misZonasVisiblesId.length; i++){
			marker = misZonasMarkersHash.get(misZonasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.hide();
			}
		}
	}
	
	function mostrarZonasVisibles(){
		for (i=0; i<misZonasVisiblesId.length; i++){
			marker = misZonasMarkersHash.get(misZonasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.show();
			}
		}
	}
	
	function ocultarZona(idZona){
		pos=indexOfArray(misZonasVisiblesId,idZona.toString());
		if (pos!=-1)
			misZonasVisiblesId.splice(pos,1);
		refreshViewZonas();
	}
	
	function mostrarZona(idZona){
		misZonasVisiblesId.push(idZona.toString());
		refreshViewZonas();
	}
		
	function verZonasSeleccionadas(){
		misZonasVisiblesId = new Array();
		for (var i=0; i<zonasSeleccionadasId.length;i++)
			misZonasVisiblesId[i] = zonasSeleccionadasId[i];
		for (var i=0; i<zonasSeleccionadasHeredadasId.length;i++)
			misZonasVisiblesId.push(zonasSeleccionadasHeredadasId[i]);
		refreshViewZonas();
	}
	
	function ocultarZonasSeleccionadas(){
		for (var i=0;i<zonasSeleccionadasId.length;i++){
			pos=indexOfArray(misZonasVisiblesId,zonasSeleccionadasId[i].toString());
			if (pos!=-1)
				misZonasVisiblesId.splice(pos,1);
		}
		for (var i=0;i<zonasSeleccionadasHeredadasId.length;i++){
			pos=indexOfArray(misZonasVisiblesId,zonasSeleccionadasHeredadasId[i].toString());
			if (pos!=-1)
				misZonasVisiblesId.splice(pos,1);
		}
		refreshViewZonas();
	}

	function createZonaMarker(idZona){ //crea y retorna un Poligon dado un ID de una zona
		var miZona = misZonasHash.get(idZona.toString());
		var limites = new Array();		
		for (var i=0; i<miZona.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miZona.PUNTOSLNG[i],miZona.PUNTOSLAT[i]).transform(displayProjection, projection);
			limites[i]=geoPoint;
			}	
		var linearRing = new OpenLayers.Geometry.LinearRing(limites);
		var polygon = new OpenLayers.Geometry.Polygon(linearRing);
		var feature = new OpenLayers.Feature.Vector(polygon,null,{
            strokeColor: "#"+miZona.color,
			fillColor: "#"+miZona.color,
            strokeOpacity: 0.5,
			fillOpacity: 0.2,
            strokeWidth: 1
        });
		var layerZona = new OpenLayers.Layer.Vector("ZONA_"+idZona);
		layerZona.addFeatures(feature);
		layerZona.div.style.zIndex=800;
		return layerZona;	
	}

	function refreshViewZonas(){
		var misZonasList = misZonasHash.values();
		for (var i=0; i<misZonasList.length; i++) {
			if (misZonasList[i]!='toJSONString'){
				var auxId = misZonasList[i].id.toString();
				var layerZona = misZonasMarkersHash.get(auxId);
				if (indexOfArray(misZonasVisiblesId,auxId.toString())!=-1){ // Tiene que estar VISIBLE				    
					if ((layerZona == null)||(layerZona=='undefined')){//creo la marca de la zona	
						layerZona = createZonaMarker(auxId.toString());
						misZonasMarkersHash.put(auxId.toString(),layerZona);
						}
					  map.addLayer(layerZona);	
					}
				else { //tiene que estar OCULTO
					if ((layerZona != null)&&(map.getLayer(layerZona.id)!=null)){
					 	map.removeLayer(layerZona);
						}
					}
				}
			}
		 printTableMisZonas();		 
	}
		
	function checkedZona(check, miZona){
		if (check.checked)
			zonasSeleccionadasId.push(check.value);
		else {
			pos=indexOfArray(zonasSeleccionadasId,check.value.toString());
			if (pos!=-1)
			    zonasSeleccionadasId.splice(pos,1);
			}
	}
	function checkedZonaHeredada(check, miZona){
		if (check.checked)
			zonasSeleccionadasHeredadasId.push(check.value);
		else {
			pos=indexOfArray(zonasSeleccionadasHeredadasId,check.value.toString());
			if (pos!=-1)
			    zonasSeleccionadasHeredadasId.splice(pos,1);
			}
	}
	
	function ordenarMisZonas(){
		if (orderTypeMisZonas=="A"){
			orderTypeMisZonas="D";
			printTableMisZonas();
			document.getElementById('orderBTNmisZonas').style.backgroundImage='url(images/minimenu/BTNorderAZ.gif)';
		}
		else{
			orderTypeMisZonas="A";
			printTableMisZonas();
			document.getElementById('orderBTNmisZonas').style.backgroundImage='url(images/minimenu/BTNorderZA.gif)';
		}
	}
	
	function printTableMisZonas(){		
		tabla = '<table width="260">';
		var misZonasList=misZonasHash.values();
		var sortArray = new SortArray(misZonasList,"QUICKSORT");
		sortArray.ordenar(orderTypeMisZonas,'nombre');
		for (var i=0; i<misZonasList.length; i++) {
			if (misZonasList[i]!='toJSONString'){
			var checked = '';
			var heredado = false; //es una zona de flota y soy un movil
			if (indexOfArray(zonasSeleccionadasId,misZonasList[i].id.toString())!=-1)
				checked='checked';
			if (indexOfArray(zonasSeleccionadasHeredadasId,misZonasList[i].id.toString())!=-1)
				checked='checked';
			if ((parseInt(LOGIN.objetivoDB)==2)&&(misZonasList[i].esflota==3))
				heredado=true;
			var functionCheck = "checkedZona";
			var bgColor = "transparent";
			if (heredado){
				functionCheck = "checkedZonaHeredada";
				bgColor = "#F1F1F1";
			}
			
			tabla += '<tr oncontextmenu="return createPopUpZona(event,'+misZonasList[i].id+',this);">';
			tabla += '<td width="19">';
   			tabla += " <input type='checkbox' name='boxZones[]' value='"+misZonasList[i].id+"' "+checked+" onClick='"+functionCheck+"(this);'>";
        	tabla += '</td>';
        	tabla += '<td width="16">'; 
			tabla += '  <div style="width:14px; height:14px; border:1px gray inset; background:#'+misZonasList[i].color+'"> </div>';
        	tabla += '</td>';
        	tabla += '<td>';
        	tabla += ' <span class="inputLBL" style="background:'+bgColor+';">'+misZonasList[i].nombre+'</span>';
        	tabla += '</td>';
			tabla += '<td align="right">';
			//seccion de iconos de estado...
			tabla += '<table border="0" cellspace="1" cellpadding="0" height="18"><tr>';
			//PUBLICADO:
			tabla += '<td width="20" height="18" bgcolor="#EAEAEA" align="center" valign="middle">'
			if ((parseInt(LOGIN.objetivo)==3)&&(misZonasList[i].publico==1)){
				tabla += '<img src="images/zonaPublica.gif" border="0" title="Zona publicada"/>';
				}
			tabla += '</td>';
			//VISIBILIDAD:
			tabla += '<td width="20" height="18" bgcolor="#EAEAEA" align="center" valign="middle">'
			if (indexOfArray(misZonasVisiblesId,misZonasList[i].id.toString())!=-1){
				tabla += '<img src="images/zonaVisible.gif" border="0" onclick="highlightZonaMarker('+misZonasList[i].id.toString()+');" style="cursor:pointer;" title="Zona visible (Click para localizar y centrar)"/>';
				}
			tabla += '</td>';
			tabla += '</tr></table>';
        	tabla += '</td>';
			tabla += '</tr>';
			}
		}
		tabla += '</table>';
		document.getElementById('divListaZonas').innerHTML = tabla;
	}
	
	function OnReadyStateChangeMisZonas(){
		ready = reqHandlerMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			misZonasJSON = reqHandlerMisZonas.responseText.parseJSON();
			if (misZonasJSON.length != 'undefined') {		
				for (i=0; i<misZonasJSON.length; i++){
					misZonasHash.put(misZonasJSON[i].id.toString(), misZonasJSON[i]);
				}				
				refreshViewZonas();
				/*if (LOGIN.PERMISOS[6])
					CargarReglas();*/
			}
		document.getElementById("busyImg").style.visibility = "hidden";
		autoRefreshFlag = 0;
		}
	}
	
	function CargarMisZonas() {
    	reqParamMisZonas = "COMMAND=MISZONAS";
    	reqParamMisZonas += "&CUENTA=" + LOGIN.cuentaFk;
		reqParamMisZonas += "&ESFLOTA=" + LOGIN.objetivoDB;
		reqParamMisZonas += "&OBJETIVO="+ LOGIN.objetivo;
		reqParamMisZonas += "&TABLAID="+ LOGIN.tablaId;
		/*if (parseInt(LOGIN.objetivoDB) == 3)
			reqParamMisZonas += "&ESFLOTA=1";
		else
			reqParamMisZonas += "&ESFLOTA=0";*/
    	document.getElementById("busyImg").style.visibility = "visible";
    	if (msie) 
            reqHandlerMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerMisZonas = new XMLHttpRequest();
        reqHandlerMisZonas.onreadystatechange = OnReadyStateChangeMisZonas;    
        reqHandlerMisZonas.open("POST", "querycontroller.php", true);
        reqHandlerMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerMisZonas.send(reqParamMisZonas);
    }
	

/*************************FUNCIONES PARA PANTALLA NUEVA ZONA************************/
	//var newZonaShape = null;
	var isNewZona = true;
	
	var newZonaPolygonLayer = null;
	var newZonaMarkersLayer = null;
	var newZonaEvents = null;
	var dragUpdateZonaMarkersEvents = null;
		
	var newZonaLineColor = "#414141";
	var newZonaPoints = new Array();
	var newZonaMarkers = new Array();
	
	var newZonasHistorial = new Array(); //array de arrays. Guarda las markers que se han ido creando en el orden que corresponde
	
	function zonaChangeColor(newColor){
		document.getElementById('colorZonaText').color.hidePicker();
		if (newZonaPolygonLayer.features.length>0){
			drawNewZona();
		}
	}
	
	function clearNewZona() {
		// Remueve el poligono (zona) del mapa y resetea los arrays
		if (newZonaMarkersLayer!=null){
			newZonaPolygonLayer.destroyFeatures();
			newZonaMarkersLayer.clearMarkers();
			newZonaMarkers.length = 0;
			newZonaPoints.length = 0;
		}
	}
	
	function nuevaZona() {
		dejarDeSeguir();
		//mostrar panel de nueva zona
		document.getElementById('newZonaTitle').innerHTML = "Nueva Zona";
		document.getElementById('newZonaDesc').innerHTML = "Haga clic en al menos en tres lugares diferentes del mapa para dibujar una zona. Los ángulos de la zona son arrastrables y extraíbles. Puede añadir más vértices simplemente haciendo 'click' o eliminarlos con 'doble click' sobre el vertice que desee."
		hideDiv('div_miszonasPpal');
		showDiv('div_nuevaZona');
		setEstadoNuevaZona();
		cleanFormNuevaZona();
		newZonaPoints = new Array();
	    newZonaMarkers = new Array();
		isNewZona = true;
		//newZonaShape = null;
	}
	
	function cleanEstadoNuevaZona(){ //limpia el mapa del estado "MARCAR NUEVA ZONA"
		if (dragUpdateZonaMarkersEvents!=null){
			dragUpdateZonaMarkersEvents.deactivate();
			map.removeControl(dragUpdateZonaMarkersEvents);
			dragUpdateZonaMarkersEvents.destroy();
			dragUpdateZonaMarkersEvents=null;
		}
	    if (newZonaPolygonLayer!=null){
			map.removeLayer(newZonaPolygonLayer);
			newZonaPolygonLayer.destroy();
			newZonaPolygonLayer = null;
			map.removeLayer(newZonaMarkersLayer);
			newZonaMarkersLayer.destroy();
			newZonaMarkersLayer = null;
		}
		if(newZonaEvents!=null)
		    newZonaEvents.deactivate();
		defaultEvents.activate();
		hideDiv('div_nuevaZona');
		showDiv('div_miszonasPpal');
		clearNewZona();
		map.div.style.cursor = "default";
		
		refreshViewZonas();
	}
	
	
	
	function setEstadoNuevaZona(){ //prepara el mapa para el estado "MARCAR NUEVA ZONA"
		newZonaPolygonLayer = new OpenLayers.Layer.Vector("Nueva Zona Polygon");
		map.addLayer(newZonaPolygonLayer);
		newZonaMarkersLayer = new OpenLayers.Layer.Markers("Nueva Zona Markers");
		map.addLayer(newZonaMarkersLayer);
		if (newZonaEvents==null){		
			newZonaEvents = new OpenLayers.Control.NewZona();
	        map.addControl(newZonaEvents);
		}
		defaultEvents.deactivate();
        newZonaEvents.activate();
		dragUpdateZonaMarkersEvents = new OpenLayers.Control.DragMarker(newZonaMarkersLayer, {
											'onStart': function() {addChangeNuevaZona();},
											'onComplete': function() {addChangeNuevaZona(); drawNewZona();}
											});
		map.addControl(dragUpdateZonaMarkersEvents);
		dragUpdateZonaMarkersEvents.activate();
		map.div.style.cursor = "crosshair";
	}
	

	function cleanFormNuevaZona(){
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		document.getElementById('zonaIdHID').value="";
		document.getElementById('zonaArea').innerHTML="0 km&sup2;";
		document.getElementById('descZona').value="";
		document.getElementById('nombreZona').value="";
		document.getElementById('colorZonaId').value=COLOR_DEFAULT_ZONA_GMAP;
		document.getElementById('colorZonaText').style.background='#'+COLOR_DEFAULT_ZONA_GMAP;
		if (parseInt(LOGIN.objetivo) == 3)
			document.getElementById('zonaPublicaCHK').checked=false;
		clearNewZona();
		newZonasHistorial = new Array();
	}
	
	
	function addIconVerticeZona(icon) { // Agregar atributos al icon vertice de zona
	   icon.iconSize = new GSize(11, 11);
 	   icon.dragCrossSize = new GSize(0, 0);
       icon.shadowSize = new GSize(11, 11);
       icon.iconAnchor = new GPoint(5, 5);
    }


	function zonaAddVertice(point) {
	   if(point) {
	    // vertice marker icons
		var size = new OpenLayers.Size(11,11);
		var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h));
		var icon = new OpenLayers.Icon('images/vertice.png', size, offset);
		var markerVertice = new OpenLayers.Marker(point,icon);
		markerVertice.events.register('mouseover', markerVertice, function(evt) {  markerVertice.setUrl('images/verticeHover.png');});
		markerVertice.events.register('mouseout', markerVertice, function(evt) {  markerVertice.setUrl('images/vertice.png');});
		markerVertice.events.register('dblclick', markerVertice, function(evt) { // Encontrar el vertice y removerlo					  	  
  		   																	  for(var n = 0; n < newZonaMarkers.length; n++) {
			   																	 if(newZonaMarkers[n] == markerVertice) {
																					 addChangeNuevaZona();
    																				 newZonaMarkersLayer.removeMarker(newZonaMarkers[n]);
			   																		 break;
	   		  																	 }
	  	   																	   }
	      																	   newZonaMarkers.splice(n, 1);
		   																	   drawNewZona(); 
																			 });
	    newZonaMarkers.push(markerVertice);
		addChangeNuevaZona();
	    newZonaMarkersLayer.addMarker(markerVertice);
	    if (isNewZona)
	    	drawNewZona();
	    }
	}


	function drawNewZona() {
		newZonaPolygonLayer.destroyFeatures();
 		newZonaPoints.length = 0;		
		var limites = new Array();
	    for(var i = 0; i < newZonaMarkers.length; i++) {
		  newZonaPoints.push(newZonaMarkers[i].lonlat.clone().transform(projection, displayProjection));
		  var geoPoint = new OpenLayers.Geometry.Point(newZonaMarkers[i].lonlat.lon,newZonaMarkers[i].lonlat.lat);
		  limites[i]=geoPoint;
		}
		if (newZonaMarkers.length>0)
	    	newZonaPoints.push(newZonaMarkers[0].lonlat.clone().transform(projection, displayProjection)); // Cerrar la figura con la ultima linea o no...
		var linearRing = new OpenLayers.Geometry.LinearRing(limites);
		var polygon = new OpenLayers.Geometry.Polygon(linearRing);
		var feature = new OpenLayers.Feature.Vector(polygon,null,{
            strokeColor: newZonaLineColor,
			fillColor: "#"+document.getElementById('colorZonaId').value,
            strokeOpacity: 1,
			fillOpacity: 0.2,
            strokeWidth: 3
        });
		area = polygon.getArea();
		var inPerDisplayUnit = OpenLayers.INCHES_PER_UNIT['km'];  
        if(inPerDisplayUnit) {  
            var inPerMapUnit = OpenLayers.INCHES_PER_UNIT[map.units];  
            area *= Math.pow((inPerMapUnit / inPerDisplayUnit), 2);  
        }  
		
		if(newZonaMarkers.length <= 2 ) {
		  document.getElementById('zonaArea').innerHTML="0 km&sup2;";
		}
		else if(newZonaMarkers.length > 2 ) { 
		  document.getElementById('zonaArea').innerHTML=area.toFixed(3)+" km&sup2;";
		}
	    newZonaPolygonLayer.addFeatures(feature);
	}
	
	function addChangeNuevaZona(){
		var cloneArray = new Array(); 
		for (var i=0; i<newZonaMarkers.length; i++){ 
			var cloneMarker = new OpenLayers.Marker(newZonaMarkers[i].lonlat.clone(),newZonaMarkers[i].icon.clone());
			cloneArray[i] = cloneMarker;
			}
		newZonasHistorial.push(cloneArray);
	}
	
	function removeChangeNuevaZona(){
		if (newZonasHistorial.length>1){
			newZonaMarkersLayer.clearMarkers();			
			newZonaMarkers = newZonasHistorial[newZonasHistorial.length-2];
			for (var i=0; i<newZonaMarkers.length; i++)
				newZonaMarkersLayer.addMarker(newZonaMarkers[i]);
			newZonasHistorial.length = newZonasHistorial.length-1;
			drawNewZona();
		}
		else {
			if (document.getElementById('zonaIdHID').value=='') 
				cleanFormNuevaZona(); 
			else 
				cleanFormModificarZona();
		}
			
	}

	/*************************FUNCIONES PARA PANTALLA MODIFICAR ZONA************************/
	function cleanFormModificarZona(){
		clearNewZona();
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		var zonaId = document.getElementById('zonaIdHID').value;
		zonaModificar = misZonasHash.get(zonaId.toString());		
		document.getElementById('zonaArea').innerHTML="0 km&sup2;";
		document.getElementById('descZona').value=zonaModificar.datos;
		document.getElementById('nombreZona').value=zonaModificar.nombre;
		document.getElementById('colorZonaId').value=zonaModificar.color;
		document.getElementById('colorZonaText').style.background='#'+zonaModificar.color;
		if (parseInt(LOGIN.objetivo) == 3){
			document.getElementById('zonaPublicaCHK').checked=false;
			if (zonaModificar.publico==1)
				document.getElementById('zonaPublicaCHK').checked=true;
		}
		//creo los vertices a partir de los puntos que tenemos guardados.		
		isNewZona = false;
        for (i=0; i<zonaModificar.PUNTOSLAT.length-1; i++){ //hago lenght-1 porque el ultimo punto es el repetido que cierra el poligono
		    var lonlat = new OpenLayers.LonLat(parseFloat(zonaModificar.PUNTOSLNG[i]),parseFloat(zonaModificar.PUNTOSLAT[i])).transform(displayProjection, projection);
			zonaAddVertice(lonlat);
			}
		drawNewZona();		
		centrarNewZona();
		isNewZona = true;
		newZonasHistorial = new Array();
	}
	
	function modificarZona(idZona) {
		if (idZona!=null){
			dejarDeSeguir();
			//mostrar panel de nueva zona			
			document.getElementById('newZonaTitle').innerHTML = "Modificar Zona";
			document.getElementById('newZonaDesc').innerHTML = "Para modificar la zona tenga en cuenta que los ángulos son arrastrables y extraíbles. Puede añadir más vértices haciendo 'click'. Tenga en cuenta que los nuevos vertices se uniran a partir del ultimo que ha sido creado."
			hideDiv('div_miszonasPpal');
			showDiv('div_nuevaZona');
			setEstadoNuevaZona();
			zonaModificar = misZonasHash.get(idZona.toString());
			clearNewZona();
			pos = indexOfArray(misZonasVisiblesId, zonaModificar.id.toString());
			if (pos!=-1) //La marca de zona estaba visible
				map.removeLayer(misZonasMarkersHash.get(zonaModificar.id.toString())); //remuevo la layer a modificar del mapa
			//inicializo el form
			hideDiv('newZonaErrorDisplay');
			document.getElementById("newZonaErrorDisplay").innerHTML = "";
			document.getElementById('zonaIdHID').value=zonaModificar.id;
			cleanFormModificarZona();	
		}
	}
	
	
	   /*************************FUNCIONES PARA GUARDAR UNA ZONA************************/
	var reqHandlerSaveMisZonas = null;
		
	function validarNuevaZona(){
		errorMsg = '';
		countPuntos = newZonaPoints.length;
		desc = document.getElementById("descZona").value;
		nombre = document.getElementById("nombreZona").value;
		
		if (countPuntos<=3)
			errorMsg += "Debe marcar al menos tres puntos para grabar una zona.<br>";
		
		if (trim(nombre)!=''){
			if (!_validString(nombre))
				errorMsg += "El campo 'nombre' no acepta caracteres especiales.<br>";	
			}
		else
			errorMsg += "El campo 'nombre' es obligatorio.<br>";
		
		if (trim(desc)!=''){
			if (!_validString(desc))
				errorMsg += "El campo 'descripcion' no acepta caracteres especiales.<br>";	
			}

		if (errorMsg == '')
			return true;
		document.getElementById("newZonaErrorDisplay").innerHTML = errorMsg;
		showDiv("newZonaErrorDisplay");
		return false;	
	}
	
	function OnReadyStateChangeSaveMisZonas(){
		ready = reqHandlerSaveMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevaZonaJSON = reqHandlerSaveMisZonas.responseText.parseJSON();
			if (nuevaZonaJSON.id != -1) {	
				misZonasHash.put(nuevaZonaJSON.id.toString(),nuevaZonaJSON);
				alert('Grabacion realizada con exito!');
				if (indexOfArray(misZonasVisiblesId,nuevaZonaJSON.id.toString())==-1) //La zona estaba invisible .:. la marco como visible
					misZonasVisiblesId.push(nuevaZonaJSON.id.toString());
				marker = misZonasMarkersHash.get(nuevaZonaJSON.id.toString());
				if ((marker!=null)&&(marker!='undefined')){ //La marca de zona estaba creada, es una modificacion...
					//remuevo la vieja marca de zona del registro
					misZonasMarkersHash.remove(nuevaZonaJSON.id.toString());
				}			
				cleanEstadoNuevaZona();
				refreshViewZonas();
			}
			else{
				document.getElementById('newZonaErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar la zona.'
				showDiv('newZonaErrorDisplay');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}
	
	function guardarZona() {
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		if (validarNuevaZona()){		
			es_flota = 0;
			es_publico = 0;
			if (parseInt(LOGIN.objetivo) == 3){
				es_flota=1;				
				if(document.getElementById('zonaPublicaCHK').checked)
					es_publico = 1;	
			}
			puntosLNG = new Array();
			puntosLAT = new Array();
			for (i=0; i < newZonaPoints.length; i++){ 
				puntosLNG[i]=newZonaPoints[i].lon.toString().substr(0,11);
				puntosLAT[i]=newZonaPoints[i].lat.toString().substr(0,11);
			}
	    	reqParamMisZonas = "COMMAND=SAVE";
    		reqParamMisZonas += "&ORDERID="+document.getElementById('zonaIdHID').value;
			reqParamMisZonas += "&NOMBRE="+document.getElementById('nombreZona').value;
	    	reqParamMisZonas += "&LATITUDES="+puntosLAT.toString();
			reqParamMisZonas += "&LONGITUDES="+puntosLNG.toString();
    		reqParamMisZonas += "&DATOS="+document.getElementById('descZona').value;
    		reqParamMisZonas += "&FLOTAID="+LOGIN.cuentaFk;
			reqParamMisZonas += "&COLOR="+document.getElementById('colorZonaId').value;
			reqParamMisZonas += "&PUBLICO="+es_publico;
			reqParamMisZonas += "&ESFLOTA="+LOGIN.objetivoDB;
			reqParamMisZonas += "&TABLAID="+LOGIN.tablaId;
			reqParamMisZonas += "&OBJETIVO="+LOGIN.objetivo;
    		autoRefreshFlag = 1;
	    	document.getElementById("busyImg").style.visibility = "visible";
    		if (msie) 
        	    reqHandlerSaveMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveMisZonas = new XMLHttpRequest();			
			reqHandlerSaveMisZonas.onreadystatechange = OnReadyStateChangeSaveMisZonas;    
	        reqHandlerSaveMisZonas.open("POST", "persistirzona.php", true);
    	    reqHandlerSaveMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveMisZonas.send(reqParamMisZonas);
		}
    }
	
		/*************************FUNCIONES PARA ELIMINAR LAS ZONAS SELECCIONADAS************************/
	var reqHandlerDeleteMisZonas = null;
	var deleteZonaId = null;
	
	function OnReadyStateChangeDeleteMisZonas(){
		ready = reqHandlerDeleteMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = reqHandlerDeleteMisZonas.responseText.parseJSON();
			if (deleteResponse){
				if(deleteZonaId==null){ //se ejecuto con minimenu
				 	ocultarZonasSeleccionadas();
	  			    //ahora remuevo las zonas y las marcas que ya fueron eliminadas de sus respectivos arrays
				 	for (var i=0; i<zonasSeleccionadasId.length; i++){
						misZonasHash.remove(zonasSeleccionadasId[i].toString());
					 	if (misZonasMarkersHash.containsKey(zonasSeleccionadasId[i].toString())){
							 if (map.getLayerIndex(misZonasMarkersHash.get(zonasSeleccionadasId[i].toString()))!=-1)
							 	map.removeLayer(misZonasMarkersHash.get(zonasSeleccionadasId[i].toString()));
							 misZonasMarkersHash.remove(zonasSeleccionadasId[i].toString());
					 	}
				 	}
					zonasSeleccionadasId = new Array();					
				}
				else{ //se ejecuto desde POPUP MENU
					pos=indexOfArray(zonasSeleccionadasId,deleteZonaId.toString());
				    if (pos!=-1)
						zonasSeleccionadasId.splice(pos,1);
					ocultarZona(deleteZonaId.toString);
					misZonasHash.remove(deleteZonaId.toString());
					if (misZonasMarkersHash.containsKey(deleteZonaId.toString())){
						map.removeLayer(misZonasMarkersHash.get(deleteZonaId.toString()));
						misZonasMarkersHash.remove(deleteZonaId.toString());
					}					
					deleteZonaId = null;
				}
				refreshViewZonas();				
			}
			else {
				alert ("Error en consulta a DB: No se pudieron eliminar las zonas seleccionados");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}
	
	function eliminarZonas(zonaId) {
		 deleteZonaId = null;
		 if ((zonasSeleccionadasId.length>0)||(zonaId!=null)){
			if (zonasSeleccionadasHeredadasId.length>0)
				alert ('Entre su seleccion existen zonas que no tienen permisos para realizar esta operacion.');
			conf = confirm('Esta a punto de eliminar la/las zonas seleccionadas. ¿Desea continuar de todas formas?');
			if (conf){
		    	reqParamsMisZonas = "COMMAND=DELETE";
				if (zonaId!=null){
					reqParamsMisZonas += "&ORDERID="+zonaId.toString();
					deleteZonaId = zonaId.toString();
				}
				else
					reqParamsMisZonas += "&ORDERID="+zonasSeleccionadasId.join(",");
    			autoRefreshFlag = 1;
	    		document.getElementById("busyImg").style.visibility = "visible";
	    		if (msie) 
    	    	    reqHandlerDeleteMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDeleteMisZonas = new XMLHttpRequest();
	        	reqHandlerDeleteMisZonas.onreadystatechange = OnReadyStateChangeDeleteMisZonas;    
		        reqHandlerDeleteMisZonas.open("POST", "persistirzona.php", true);
    		    reqHandlerDeleteMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDeleteMisZonas.send(reqParamsMisZonas);
			}
		 }
		 else
		 	if (zonasSeleccionadasHeredadasId.length>0)
				alert ('No esta permitido realizar esta operacion para las zonas seleccionados.');
			else
		 		alert ('Debe seleccionar por lo menos una zona para poder realizar esta operacion.');
    }


	/*************************FUNCIONES PARA PUBLICAR/DESPUBLICAR LAS ZONAS SELECCIONADAS************************/
	var reqHandlerPublicarMisZonas = null;
	var publicarZonaId = null;
	
	function OnReadyStateChangePublicarMisZonas(){
		ready = reqHandlerPublicarMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			publicarResponse = reqHandlerPublicarMisZonas.responseText.parseJSON();
			if ((publicarResponse!=null)&&(publicarResponse!=-1)&&(publicarResponse!='undefined')){ // se pudo realizar la operacion, retorna 1 si se publico y 0 si se des-publico.
				if(publicarZonaId==null){ //se ejecuto con minimenu
					 //ahora cambio el valor de las zonas por el devuelto (0 o 1)
				 	for (i=0; i<zonasSeleccionadasId.length; i++){
						 if (misZonasHash.containsKey(zonasSeleccionadasId[i].toString()))
					 		 misZonasHash.get(zonasSeleccionadasId[i].toString()).publico=publicarResponse;
				 	}
				}
				else{ // se ejecuto con POPUP MENU
					if (misZonasHash.containsKey(publicarZonaId.toString()))
					 	misZonasHash.get(publicarZonaId.toString()).publico=publicarResponse;
					publicarZonaId = null;
				}
				refreshViewZonas();				
			}
			else {
				alert ("Error en consulta a DB: No se pudieron publicar las zonas seleccionadas");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}
	
	function publicarZonas(publicar, zonaId) { //si publicar=true las zonas se publican, caso contrario se des-publican
		 publicarZonaId = null;
		 if ((zonasSeleccionadasId.length>0)||(zonaId!=null)){			 
			msj = 'Esta a punto de publicar la/las zonas seleccionadas. ¿Desea continuar de todas formas?';
			if (!publicar)
				msj = 'Esta a punto de dejar de publicar la/las zonas seleccionados. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
				valuePub=0;
				if (publicar)
					valuePub=1;
		    	reqParamsMisZonas = "COMMAND=PUBLICAR";
				if(zonaId!=null){
					reqParamsMisZonas += "&ORDERID="+zonaId.toString();
					publicarZonaId = zonaId.toString();
				}
				else
	    			reqParamsMisZonas += "&ORDERID="+zonasSeleccionadasId.join(",");
				reqParamsMisZonas += "&PUBLICAR="+valuePub;
    			autoRefreshFlag = 1;
	    		document.getElementById("busyImg").style.visibility = "visible";
	    		if (msie) 
    	    	    reqHandlerPublicarMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerPublicarMisZonas = new XMLHttpRequest();
	        	reqHandlerPublicarMisZonas.onreadystatechange = OnReadyStateChangePublicarMisZonas;    
		        reqHandlerPublicarMisZonas.open("POST", "persistirzona.php", true);
    		    reqHandlerPublicarMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerPublicarMisZonas.send(reqParamsMisZonas);
			}
		 }
		 else
		 	alert ('Debe seleccionar por lo menos una zona para poder realizar esta operacion.');
    }
	
	/*************************FUNCIONES PARA CONFIGURAR COMO VISIBLES POR DEFECTO LAS ZONAS SELECCIONADAS************************/
	var reqHandlerDefaultMisZonas = null;
	
	function OnReadyStateChangeDefaultMisZonas(){
		ready = reqHandlerDefaultMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}
	
	function defaultZonasSeleccionadas() { 			 
			msj = 'Esta a punto de configurar el/todas las zonas seleccionadas como visible por defecto. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
		    	reqParamsMisZonas = "COMMAND=CHANGEZONAS";
				reqParamsMisZonas += "&CUENTA="+ LOGIN.cuentaFk;
				reqParamsMisZonas += "&ESFLOTA="+ LOGIN.objetivoDB;
				reqParamsMisZonas += "&OBJETIVO="+ LOGIN.objetivo;
				reqParamsMisZonas += "&TABLAID="+ LOGIN.tablaId;	
				/*if (parseInt(LOGIN.objetivoDB) == 3)
					reqParamsMisZonas += "&ESFLOTA=1";
				else
					reqParamsMisZonas += "&ESFLOTA=0";*/
				var zonasSelMixtaId = "";
				if (zonasSeleccionadasId.length>0){
					zonasSelMixtaId += zonasSeleccionadasId.toString();
					if (zonasSeleccionadasHeredadasId.length>0)
						zonasSelMixtaId +=",";
				}
				zonasSelMixtaId += zonasSeleccionadasHeredadasId.toString();
				reqParamsMisZonas += "&ZONASID="+zonasSelMixtaId;
    			autoRefreshFlag = 1;
	    		document.getElementById("busyImg").style.visibility = "visible";
	    		if (msie) 
    	    	    reqHandlerDefaultMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDefaultMisZonas = new XMLHttpRequest();
	        	reqHandlerDefaultMisZonas.onreadystatechange = OnReadyStateChangeDefaultMisZonas;    
		        reqHandlerDefaultMisZonas.open("POST", "sections/queryConfig.php", true);
    		    reqHandlerDefaultMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDefaultMisZonas.send(reqParamsMisZonas);
			}
    }
	
//DECLARACION DE EVENTOS
	function initMisZonasEvents() {
			//Nueva Zona
			OpenLayers.Control.NewZona = OpenLayers.Class(OpenLayers.Control, {                
                defaultHandlerOptions: {
                    'single': true,
                    'double': false,
                    'pixelTolerance': 0,
                    'stopSingle': false,
                    'stopDouble': false
                },
 
                initialize: function(options) {
                    this.handlerOptions = OpenLayers.Util.extend(
                        {}, this.defaultHandlerOptions
                    );
                    OpenLayers.Control.prototype.initialize.apply(
                        this, arguments
                    ); 
                    this.handler = new OpenLayers.Handler.Click(
                        this, {
                            'click': this.onClick
                        }, this.handlerOptions
                    );
                }, 
 
                onClick: function(e) {
					var pixel = new OpenLayers.Pixel(e.xy.x, e.xy.y);
                    var lonlat = map.getLonLatFromPixel(pixel);
					zonaAddVertice(lonlat);
                }
 
            });
			
	}

	